//package com.foreveross.bsl.monitor.web;
//
//import java.io.IOException;
//import java.io.OutputStream;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Random;
//import javax.inject.Inject;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import org.apache.log4j.Logger;
//import org.apache.poi.hssf.usermodel.HSSFCell;
//import org.apache.poi.hssf.usermodel.HSSFCellStyle;
//import org.apache.poi.hssf.usermodel.HSSFDataFormat;
//import org.apache.poi.hssf.usermodel.HSSFFont;
//import org.apache.poi.hssf.usermodel.HSSFRow;
//import org.apache.poi.hssf.usermodel.HSSFSheet;
//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.hssf.util.HSSFColor;
//import org.csair.monitor.application.MonitorApplication;
//import org.csair.monitor.application.vo.MonitorVO;
//import org.springframework.data.domain.Page;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.foreveross.bsl.mam.app.application.AppMainApplication;
//import com.foreveross.bsl.mam.app.application.AppVersionApplication;
//import com.foreveross.bsl.mam.app.application.AppVersionWidgetVersionApplication;
//import com.foreveross.bsl.mam.app.application.vo.AppMainVo;
//import com.foreveross.bsl.mam.app.application.vo.AppVersionVo;
//import com.foreveross.bsl.mam.app.application.vo.AppVersionWidgetVersionVo;
//import com.foreveross.bsl.mam.model.application.WidgetApplication;
//import com.foreveross.bsl.mam.model.application.vo.WidgetVO;
//import com.foreveross.bsl.web.BaseController;
//import com.foreveross.common.infra.web.QueryFilter;
//import com.foreveross.common.infra.web.QueryOrder;
//import com.foreveross.common.infra.web.QuerySpecs;
//import com.foreveross.common.infra.web.model.PageMustache;
//import com.foreveross.common.infra.web.model.QueryModelHelper;
//import com.foreveross.common.infra.web.model.SelectBoxModel;
//import com.foreveross.common.infra.web.model.SortInfoModel;
//
///**
// * 
// * @author lizhifeng
// * 
// */
////@Controller
//@RequestMapping("/monitor")
//public class MonitorController extends BaseController {
//	private Logger log = Logger.getLogger(this.getClass());
//	@Inject
//	private MonitorApplication monitorApplication;
//	@Inject
//	private AppMainApplication appMainApplication;
//	@Inject
//	private AppVersionApplication appVersionApplication;
//	@Inject
//	private AppVersionWidgetVersionApplication appVersionWidgetVersionApplication;
//
//	@Inject
//	private WidgetApplication widgetApplication;
//
//	/**
//	 * 监控记录分页查询
//	 * 
//	 * @param pageNumber
//	 * @param pageSize
//	 * @param model
//	 * @return
//	 */
//	@RequestMapping("/query")
//	public String queryList(
//			@RequestParam(value = "page", defaultValue = "1") int pageNumber,
//			@RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,
//			Model model,
//			HttpServletRequest request,
//			HttpServletResponse response,
//			@RequestParam(value = "appId") String appId,
//			@RequestParam(value = "isDownLoadlLog", defaultValue = "false") String isDownLoadlLog) {
//		String queryUrl = "/monitor/query";
//		QueryModelHelper queryHelper = new QueryModelHelper(queryUrl,
//				makeQueryFields(), makeSortInfo());
//		QuerySpecs querySpecs = queryHelper.populateQueryModel(model, request);
//		QueryOrder qo = querySpecs.getOrder("monitor_date");
//		if (qo == null) {
//			querySpecs.setOrder("monitor_date", QueryOrder.Direction.DESC);
//		}
//		log.info("queryHelper for json:" + queryHelper);
//		AppMainVo appMainVo = appMainApplication.getEntity(appId);
//		List<WidgetVO> widgetVOs = getMoudlesByAppId(appId);
//		model.addAttribute("widgetVOs", widgetVOs);
//		// 一期实际显示的的是应用标识，而非应用名称，概因应用名称可能重复
//		model.addAttribute("userName", request.getParameter("q_LIKE_userName"));
//		model.addAttribute("action", request.getParameter("q_LIKE_action"));
//		model.addAttribute("moduleName",
//				request.getParameter("q_LIKE_moduleName"));
//		model.addAttribute("appName", appMainVo.getIdentifier());
//		if (request.getParameter("q_GTE_monitorDate") != null
//				&& request.getParameter("q_GTE_monitorDate") != "") {
//			model.addAttribute("beginDate",
//					request.getParameter("q_GTE_monitorDate").substring(0, 10));
//		}
//		if (request.getParameter("q_LTE_monitorDate") != null
//				&& request.getParameter("q_LTE_monitorDate") != "") {
//			model.addAttribute("endDate",
//					request.getParameter("q_LTE_monitorDate").substring(0, 10));
//		}
//		model.addAttribute("appId", appId);
//		ObjectMapper objectMapper = new ObjectMapper();
//		String filters = "";
//		String orders = "";
//		try {
//			filters = objectMapper.writeValueAsString(querySpecs.getFilters());
//			orders = objectMapper.writeValueAsString(querySpecs.getOrders());
//		} catch (JsonProcessingException e) {
//			model.addAttribute("message", e);
//			log.error(e);
//		}
//		Page<MonitorVO> page = monitorApplication.findMonitors(pageNumber,
//				pageSize, filters, orders);
//		model.addAttribute("monitors", page);
//		model.addAttribute("page", new PageMustache(page, PAGINATION_SIZE));
//		return "monitor/monitor-list";
//	}
//
//	private SortInfoModel makeSortInfo() {
//		SortInfoModel sim = new SortInfoModel();
//		sim.setSortEntry("monitor_date", "记录日期", true);
//		sim.setSortEntry("action", "按类别", false);
//		sim.setSortEntry("module_name", "按模块", false);
//		return sim;
//	}
//
//	private SelectBoxModel makeQueryFields() {
//		SelectBoxModel sbm = new SelectBoxModel();
//		sbm.addOption("LIKE_user_name", "用户名");
//		sbm.addOption("LIKE_action", "类型");
//		return sbm;
//	}
//
//	/**
//	 * 获取某个应用上架版本的所有模块
//	 * 
//	 * @param appId
//	 */
//	private List<WidgetVO> getMoudlesByAppId(String appId) {
//		List<WidgetVO> widgetVOs = new ArrayList<WidgetVO>();
//		List<AppVersionVo> list = appVersionApplication.getAppStatus(appId, 4);
//		Map<String, String> widgetFilter = new HashMap<String, String>();
//		if (list != null && list.size() > 0) {
//			for (AppVersionVo vo : list) {
//				List<AppVersionWidgetVersionVo> aVos = appVersionWidgetVersionApplication
//						.getListByPlatEntity(vo.getPlatformid(),
//								vo.getVersion(), vo.getApplicationid());
//				for (AppVersionWidgetVersionVo avo : aVos) {
//					WidgetVO widgetVO = widgetApplication.getEntity(avo
//							.getWidgetId());
//					if (widgetVO != null) {
//						if (!widgetFilter.containsKey(widgetVO.getId())) {
//							widgetVOs.add(widgetVO);
//							widgetFilter
//									.put(widgetVO.getId(), widgetVO.getId());
//						}
//					}
//				}
//			}
//		}
//		return widgetVOs;
//	}
//
//	public static MonitorVO initMonitor() {
//		MonitorVO monitor = new MonitorVO();
//		monitor.setAction("Login");
//		monitor.setAppName("com.csair.isupport.test");
//		monitor.setClassName("controllers.service.rbac.LoginController.login()");
//		monitor.setUserName("cube");
//		monitor.setMonitorDate(new Date());
//		return monitor;
//	}
//
//	/**
//	 * 将log导出到excel
//	 * 
//	 * @param response
//	 * @param pageNumber
//	 * @param pageSize
//	 * @param model
//	 */
//	@RequestMapping("export")
//	public void exportLogToEccel(
//			@RequestParam(value = "page", defaultValue = "1") int pageNumber,
//			@RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,
//			Model model,
//			HttpServletRequest request,
//			HttpServletResponse response,
//			@RequestParam(value = "appId") String appId,
//			@RequestParam(value = "isDownLoadlLog", defaultValue = "false") String isDownLoadlLog) {
//		String queryUrl = "/monitor/export";
//		QueryModelHelper queryHelper = new QueryModelHelper(queryUrl,
//				makeQueryFields(), makeSortInfo());
//		QuerySpecs querySpecs = queryHelper.populateQueryModel(model, request);
//		ObjectMapper objectMapper = new ObjectMapper();
//		String filters = "";
//		String orders = "";
//		try {
//			filters = objectMapper.writeValueAsString(querySpecs.getFilters());
//			orders = objectMapper.writeValueAsString(querySpecs.getOrders());
//		} catch (JsonProcessingException e) {
//			model.addAttribute("message", e);
//			log.error(e);
//		}
//		Page<MonitorVO> page = monitorApplication.findMonitors(1, 100000,
//				filters, orders);
//		exportLogsToEcxel(page.getContent(), response);
//		return;
//	}
//
//	@Override
//	protected String getModuleMenuName() {
//		return "效能监控";
//	}
//
//	/**
//	 * 将监控计量局导出到Excel
//	 * 
//	 * @param mvos
//	 * @param response
//	 */
//	@SuppressWarnings({ "deprecation", "static-access" })
//	public void exportLogsToEcxel(List<MonitorVO> mvos,
//			HttpServletResponse response) {
//
//		// List<MonitorVO> mvos = new ArrayList<MonitorVO>();
//		log.info("export log to excel begin sincely hope successful~_~");
//		HSSFWorkbook wb = new HSSFWorkbook();
//		// create a new sheet 创建一个新表
//		HSSFSheet s = wb.createSheet("监控记录");
//		// HSSFSheet e = wb.createSheet("监控记录2");//如果数据过多此处可以分表
//		// s.autoSizeColumn(3, true);//设置自适应宽度
//		s.setColumnWidth(2, 5000);// 设置第二列的宽度
//		s.setColumnWidth(3, 10000);
//		s.setColumnWidth(4, 10000);
//		s.setColumnWidth(5, 5000);
//		s.setColumnWidth(7, 5000);
//		// declare a row object reference 声明一个新行
//		HSSFRow r = null;
//		// declare a cell object reference 声明一个单元格
//		HSSFCell c = null;
//		// create 2 cell styles 创建2个单元格样式
//		HSSFCellStyle cs = wb.createCellStyle();
//		HSSFCellStyle cs2 = wb.createCellStyle();
//		// create 2 fonts objects 创建2个单元格字体
//		HSSFFont f = wb.createFont();
//		HSSFFont f2 = wb.createFont();
//		// Set font 1 to 12 point type, blue and bold 设置字体类型1到12号，蓝色和粗体
//		f.setFontHeightInPoints((short) 12);
//		f.setColor(HSSFColor.RED.index);
//		f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//
//		// Set font 2 to 10 point type, red and bold 设置字体类型2到10号，红色和粗体
//		f2.setFontHeightInPoints((short) 10);
//		f2.setColor(HSSFColor.RED.index);
//		f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//
//		// Set cell style and formatting 设置单元格样式和格式
//		cs.setFont(f);
//		cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
//
//		// Set the other cell style and formatting 设置其他单元格样式和格式
//		cs2.setBorderBottom(cs2.BORDER_THIN);
//		cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
//		cs2.setFont(f2);
//
//		// Define a few rows 定义一个新行
//		for (short rownum = (short) 0; rownum < mvos.size() + 1; rownum++) {
//			MonitorVO monitorvo = new MonitorVO();
//			if (rownum != 0) {
//				monitorvo = mvos.get(rownum - 1);
//			}
//
//			r = s.createRow(rownum);
//
//			for (short cellnum = (short) 0; cellnum < 8; cellnum += 1) {
//				if (cellnum == 0) {
//					c = r.createCell(cellnum);
//					if (rownum != 0) {
//						c.setCellValue(String.valueOf(rownum));
//					}
//
//				}
//				if (cellnum == 1) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("类型");
//					} else {
//						c.setCellValue(monitorvo.getAction());
//					}
//
//				}
//				if (cellnum == 2) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("方法");
//					} else {
//						c.setCellValue(monitorvo.getMethodName());
//					}
//				}
//				if (cellnum == 3) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("应用");
//					} else {
//						c.setCellValue(monitorvo.getClassName());
//					}
//
//					// c2.setCellValue(new HSSFRichTextString("Hello! " +
//					// cellnum));
//				}
//				if (cellnum == 4) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("应用名");
//					} else {
//						c.setCellValue(monitorvo.getAppName());
//					}
//				}
//				if (cellnum == 5) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("模块名");
//					} else {
//						c.setCellValue(monitorvo.getModuleName());
//					}
//				}
//				if (cellnum == 6) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("用户");
//					} else {
//						c.setCellValue(monitorvo.getUserName());
//					}
//				}
//				if (cellnum == 7) {
//					c = r.createCell(cellnum);
//					if (rownum == 0) {
//						c.setCellValue("记录日期");
//					} else {
//						SimpleDateFormat sf = new SimpleDateFormat(
//								"yyyy-MM-dd HH:mm:ss");// 设置日期格式
//						if (monitorvo.getMonitorDate() != null) {
//							String createAt = sf.format(monitorvo
//									.getMonitorDate());
//							c.setCellValue(createAt);
//						}
//					}
//				}
//			}
//		}
//
//		try {
//			// 先设置文件头等信息，在write
//			response.setContentType("application/octet-stream");
//			response.setHeader("Content-Disposition", "attachmemnt;filename="
//					+ new String(getFileName().getBytes("gbk"), "ISO8859-1"));
//			OutputStream out = response.getOutputStream();
//			wb.write(out);
//			out.flush();
//			out.close();
//
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//
//	}
//
//	public String getFileName() {
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
//		String date = sdf.format(new Date());
//		Random random = new Random();
//		int ran = random.nextInt(10000);
//		String fileName = date + ran + ".xls";
//		return fileName;
//	}
//}
